#include "led.h"
#include "LED_hw.h"
#include "string.h"
#include "tim_hw.h"




/*
控制灯亮灭的变量
*/
LED_TypeDef		tagLED;



/*
说明：
初始化硬件IO和控制变量。
*/
void initLED(void)
{
	memset(&tagLED, 0, sizeof(LED_TypeDef));
	
	init_led_gpio();
	
	//测试
	//setLEDStatues(1);	//慢闪
	setLEDStatues(2);	//快闪
}


/*
说明：
状态指示灯，1个，绿色。
常亮（通电无数据传输），快闪（有数据传输）

输入参数：
sta = 0x01，慢闪
sta = 0x02，快闪
      0x03, 长灭

返回参数：
0x00：设置成功


*/
uint8_t setLEDStatues (uint8_t sta)
{
	static uint8_t staOld = 0xfe;
	if (sta != staOld)
	{
		staOld = sta;
		
		if (sta == 0x01)
		{
			tagLED.sta = 0x03;
		}
		else if(sta == 0x02)
		{
			tagLED.sta = 0x01;
		}
		else
		{
			tagLED.sta = 0x05;
		}
	}
	
	return 0;
}


/*
闪3秒
*/
void setLED_Flash_3Sec(void)
{
	tagLED.runOnce = 0;
}

/*
说明：
该函数需要一直被主循环调用，用于管理指示灯状态变化。
*/
void LEDProcess (void)
{
	
	tagLED.newMs = get1msCounter();
	
	
	//刚开机后闪烁3秒,证明板子主程序已经正常运行
	#if 0
	if (tagLED.runOnce < 0x10)
	{
		if ((tagLED.runOnce % 2) == 0)
		{
			if(getTim1MsElaps(tagLED.newMs, tagLED.oldMs) > _MS(200))
			{
				tagLED.oldMs = tagLED.newMs;
				led_light_off();
				tagLED.runOnce++;
			}
		}
		else
		{
			if(getTim1MsElaps(tagLED.newMs, tagLED.oldMs) > _MS(300))
			{
				tagLED.oldMs = tagLED.newMs;
				led_light_on();
				tagLED.runOnce++;
			}
		}

		return;
	}
	#endif
	
	
	/*
	tagLED.sta = 0x03: 慢闪
	tagLED.sta = 0x01: 快闪
	*/
	switch(tagLED.sta)
	{
		case 0x00:
			init_led_gpio();
			tagLED.oldMs = tagLED.newMs;
			//tagLED.sta = 0x03;
			break;
		
		case 0x01:
			if(getTim1MsElaps(tagLED.newMs, tagLED.oldMs) > _MS(300))
			{
				led_light_on();
				tagLED.oldMs = tagLED.newMs;
				tagLED.sta = 2;
			}
			break;
		
		case 0x02:
			if(getTim1MsElaps(tagLED.newMs, tagLED.oldMs) > _MS(200))
			{
				led_light_off();
				tagLED.oldMs = tagLED.newMs;
				tagLED.sta = 1;
			}
			break;
			
		case 0x03:
			if(getTim1MsElaps(tagLED.newMs, tagLED.oldMs) > _MS(1500))
			{
				led_light_on();
				tagLED.oldMs = tagLED.newMs;
				tagLED.sta = 4;
			}
			break;
		
		case 0x04:
			if(getTim1MsElaps(tagLED.newMs, tagLED.oldMs) > _MS(100))
			{
				led_light_off();
				tagLED.oldMs = tagLED.newMs;
				tagLED.sta = 3;
			}
			break;
		case 0x05:
			led_light_off();
			tagLED.sta = 6;
			break;		
		case 0x06:
			tagLED.oldMs = tagLED.newMs;
			break;
		default:
			tagLED.sta = 0;
			break;
	}
		

}











